package com.bigdata

import scala.io.{Codec, Source}

object Demo30Implicit {

  def main(args: Array[String]): Unit = {
    /**
     * 隐式转换变量
     * 结合柯里化使用
     */
    // 隐式转换参数
    def add(x: Int)(implicit y: Int): Int = {
      x + y
    }

    val result: Int = add(1)(2)
    println(result)

    //    val num:Int = 100
    //    println(add(10)(num))
    //    println(add(20)(num))
    //    println(add(30)(num))

    // implicit修饰一个变量
    implicit val num: Int = 100

    /**
     * 函数的参数中使用implicit修饰，在调用函数的时候，这个隐式转换的参数可以不用传递
     * 但是我们需要提前定义好一个 implicit 修饰的和参数类型一致的变量
     */
    println(add(10))
    println(add(20))
    println(add(30))

    // 也可以不用这个隐式转换的变量，手动指定
    println(add(30)(200))


    // 隐式转换变量的应用
    println(Source.fromFile("data/students.txt")(Codec("Utf-8")).getLines().toList)


  }

}
